// 云对象教程: https://uniapp.dcloud.net.cn/uniCloud/cloud-obj
// jsdoc语法提示教程：https://ask.dcloud.net.cn/docs/#//ask.dcloud.net.cn/article/129
const db = uniCloud.database();
const dbCmd = db.command;
// const uid = "121212"

module.exports = {
	/**
	 * gengxinm购物车
	 * @param {Object} params - 参数对象
	 * @param {String} params.goods_id - 商品ID
	 * @param {Object} params.param - 商品属性参数
	 * @returns {Number} 购物车商品总数
	 */
	async updateGoods(params, uid, type) {

		const {
			_id,
			quantity
		} = params;

		// 验证参数
		if (!_id) {
			throw new Error('购物车记录ID不能为空');
		}


		const cartCollection = db.collection('cart');

		// 先查询该购物车记录，验证是否属于当前用户
		const cartItem = await cartCollection.doc(_id).get();

		if (!cartItem.data || cartItem.data.length === 0) {
			throw new Error('购物车记录不存在`${_id}`', _id);
		}

		const item = cartItem.data[0];

		// 验证所有权
		if (item.uid !== uid) {
			throw new Error('没有权限修改该记录');
		}

		if (type === 'update') {

			// 确保数量是正整数
			const newQuantity = Math.max(1, Math.floor(Number(quantity) || 1));
			// 计算新的总价
			const newTotalPrice = item.param.price * newQuantity;

			// 更新数量和总价
			await cartCollection.doc(_id).update({
				'param.number': newQuantity,
				'param.total_price': newTotalPrice
			});
		} else if (type === 'remove') {
			await cartCollection.doc(_id).remove(); // 删除操作
		}


		const result = await db.collection('cart')
			.where({
				uid: uid
			})
			.get();

		// 计算总数
		const totalN = result.data.reduce((total, item) => {
			return total + (item.param?.number || 0);
		}, 0);

		return {
			totalN: totalN
		}
	}
}